#include "stm32f10x.h" //stm32头文件
#include "usart.h"
#include "sys.h"
#include "delay.h"
#include "vl53l0x.h"
#include "vl53l0x_gen.h"
#include "pwm.h"

/******************************************************************************/
//1、VL53L0X\platform\inc\vl53l0x_i2c.h  定义SDA和SCL
//2、VL53L0X\platform\src\vl53l0x_i2c.c  初始化SDA和SCL   void VL53L0X_i2c_init(void)
/******************************************************************************/
#define LED_blink      GPIOA->ODR^=(1<<3)  
/******************************************************************************/
extern VL53L0X_Dev_t vl53l0x_dev;//设备I2C数据参数
u16 dist[32];   //滑动均值滤波
u8  dist_cnt;
/******************************************************************************/
void distance_deal(VL53L0X_Error status);
/******************************************************************************/
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);//使能USART1;GPIOA,GPIOB,GPIOC,GPIOD;AFIO;
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //禁止JTAG功能，把PB3，PB4作为普通IO口使用
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3是LED灯
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//通用推挽输出	
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//速度
	GPIO_Init(GPIOA, &GPIO_InitStructure);//对选中管脚初始化
	GPIO_SetBits(GPIOA,GPIO_Pin_3);   //上电点亮LED
}
/******************************************************************************/
/******************************************************************************/
int main(void)
{
	u32 i;
	VL53L0X_Error Status;//工作状态
	
	GPIO_Configuration();
	uart_init(115200);  //串口1
	delay_init();
	delay_ms(200);

	VL53L0X_i2c_init();
	//mode模式配置 0:默认;1:高精度;2:长距离
	if(vl53l0x_set_mode(&vl53l0x_dev,0))   //配置测量模式 0:default   1:High Accuracy  2:Long Range   3:High Speed
		{
			printf("Mode Set Error!!!\r\n");
		}
	else
		printf("VL53L0X_Init OK!!!\r\n");
//	TIM1_PWM_Init(8999, 0);
//    TIM2_PWM_Init(8999, 0);
//    TIM3_PWM_Init(8999, 0);
//	TIM_SetCompare2(TIM2, 4000);				//TIM2_CH2    PA1
	
	while(1)
	{
		Status = vl53l0x_start_single_test(&vl53l0x_dev,&vl53l0x_data); //执行一次测量
		if(Status==VL53L0X_ERROR_NONE)printf("d:%4dmm\r\n",Distance_data);//打印测量距离
		else
			printf("Measurement is Error!!!\r\n");
		//实际测试，每秒测量19次，所以测量一次还是比较耗时的
		
		if(++i>=10)
			{
				i=0;
		 		LED_blink;
		 	}
		 //delay_ms(100);
	 }
}
/***************************************************************************/
/*
void distance_deal(VL53L0X_Error status)
{
	u32 i;
	u32 dist_avg;
	
	dist[dist_cnt]=Distance_data;
	if(++dist_cnt>=32)dist_cnt=0;
	dist_avg=0;
	for(i=0;i<32;i++)
	{dist_avg+=dist[i];}
	dist_avg=dist_avg/32;
	
	if(status==VL53L0X_ERROR_NONE)
		printf("d:%4dmm\r\n",dist_avg);//打印测量距离
	else
		printf("Measurement is Error!!!\r\n");
}
*/
/***************************************************************************/



